package top.infopub.mgr.mkt.service;

import com.github.pagehelper.Page;
import top.infopub.generic.GenericService;
import top.infopub.mgr.common.vo.RspVo;
import top.infopub.mgr.mkt.domain.CollectProjectDomain;
import top.infopub.mgr.mkt.domain.ProjectDomain;
import top.infopub.mgr.mkt.jsonvo.CollectJsonVo;
import top.infopub.mgr.mkt.vo.CollectProjectVo;
import top.infopub.model.mkt.*;
import top.infopub.security.vo.AuthorizationVO;

import java.util.List;

/**
 *
 * @see CollectProjectService
 * @since
 */
public interface CollectProjectService extends GenericService<CollectProject, String> {

    /**
     * 根据条件查询项目信息收集记录
     * @param page
     * @param collectProjectVo
     * @return
     * @see
     */
    Page<ProjectDomain> selectPageByDomainWhere(Page<ProjectDomain> page, CollectProjectVo collectProjectVo);

    /**
     * 新增项目信息收集
     * @param collectProject 项目信息收集
     * @param collectProjectCoops 联合体单位
     * @param collectProjectSubs 子项
     * @param fileAtts 附件
     * @see
     */
    void addCollectProject(CollectProject collectProject, List<CollectProjectCoop> collectProjectCoops,
                       List<CollectProjectSub> collectProjectSubs, List<CollectProjectAtt> fileAtts);

    /**
     * 编辑项目信息收集
     * @param collectProject
     * @param collectProjectCoops
     * @param collectProjectSubs
     * @param fileAtts
     */
    void editCollectProject(CollectProject collectProject, List<CollectProjectCoop> collectProjectCoops,List<CollectProjectSub> collectProjectSubs, List<CollectProjectAtt> fileAtts,String submitType);


    /**
     * 根据id查询项目信息详情
     * @param id 主键id
     * @return
     * @see
     */
    CollectProjectVo selectById(String id);


    /**
     * 根据项目Id查询预立项和城市调研信息
     */
    CollectProjectDomain queryByProCode(String proCodes);




    /**
     * 查询未绑定公司的项目记录（processStatus = '9'）
     * @return
     * @see
     */
    List<CollectProject> selectNotBindOrg();

    /**
     * 查询项目名称是否重复（processStatus in('1','9')）
     * @param proName 项目名称
     * @return
     * @see
     */
    List<CollectProject> selectByProName(String proName);

    CollectProject selectByProCode(String proCode);

    RspVo saveAll(ProjectInfo projectInfo, List<AfterSummaryCoop> summary, ProjectSubInfo projectSubInfo, List<ProjectRisk> projectRisk, List<ProjectAttachment> attachmentList, CollectProject collectProject, AuthorizationVO user,String bodyStr,Integer submitType);

    CollectJsonVo queryDetailById(String id);

    CollectProject selectByProCodeStatus(String proCode);
}
